package com.web.dao;

import com.jdbc.DataSourceTool;
import com.web.bean.PageModel;
import com.web.bean.学生情况;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

//针对学生情况的数据库代码封装，包含所有的数据库操作方法
public class 学生情况Dao {
    //增
    public boolean insertStu(学生情况 stu) throws SQLException {
        //通过DataSourceTool获取数据库链接对象
        Connection connection = DataSourceTool.getConnection();
        //定义sql
        String sql = "insert into 学生情况(学号,姓名,性别,出生日期,生源地,院系代号,政治面貌,是否住宿,宿舍电话,照片)" +
                "values (?,?,?,?,?,?,?,?,?,?)";
        //创建sql对象
        try {
            PreparedStatement ps = connection.prepareStatement(sql);
            //给sql赋值
            ps.setString(1,stu.get学号());
            ps.setString(2,stu.get姓名());
            ps.setString(3, stu.get性别());
            ps.setString(4,stu.get出生日期());
            ps.setString(5, stu.get生源地());
            ps.setString(6, stu.get院系代号());
            ps.setString(7, stu.get政治面貌());
            ps.setInt(8, stu.get是否住宿());
            ps.setString(9, stu.get宿舍电话());
            ps.setString(10,stu.get照片());
            //执行sql
            int resul = ps.executeUpdate();
            //
            if(resul>0){
                return true;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭链接
            DataSourceTool.closeConnection(connection);
        }
        return false;
    }
    //删
    public boolean deleteStu(String 学号) throws SQLException {
        //通过DataSourceTool获取数据库链接对象
        Connection connection = DataSourceTool.getConnection();
        //定义sql
        String sql = "delete from 学生情况 where 学号=?;";
        //创建sql对象
        try {
            PreparedStatement ps = connection.prepareStatement(sql);
            //给sql赋值
            ps.setString(1,学号);

            //执行sql
            int resul = ps.executeUpdate();
            //
            if(resul>0){
                return true;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            DataSourceTool.closeConnection(connection);
        }
        return false;
    }
    public boolean updateStu(学生情况 stu) throws SQLException {

        Connection connection = DataSourceTool.getConnection();
        String sql = "update 学生情况 set 姓名=?,性别=?,出生日期=?,生源地=?,院系代号=?,政治面貌=?,是否住宿=?,宿舍电话=?,照片=? where 学号=?;";
        try {
            PreparedStatement ps = connection.prepareStatement(sql);

            ps.setString(1,stu.get姓名());
            ps.setString(2, stu.get性别());
            ps.setString(3,stu.get出生日期());
            ps.setString(4, stu.get生源地());
            ps.setString(5, stu.get院系代号());
            ps.setString(6, stu.get政治面貌());
            ps.setInt(7, stu.get是否住宿());
            ps.setString(8, stu.get宿舍电话());
            ps.setString(9,stu.get照片());
            ps.setString(10,stu.get学号());
            //执行sql
            int resul = ps.executeUpdate();
            //
            if(resul>0){
                return true;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭链接
            DataSourceTool.closeConnection(connection);
        }
        return false;
    }
    //查 -- 返回结果集
    public List<学生情况> queryStu(String search , PageModel pageModel)  {
        //创建集合用于保存数据
        List<学生情况> list = new ArrayList<>();
        //通过DataSourceTool获取数据库链接对象
        Connection connection = DataSourceTool.getConnection();
        //定义sql
        String sql = "select * from 学生情况 where 姓名 like ? limit ?,?;";
        //创建sql对象
        try {
            PreparedStatement ps = connection.prepareStatement(sql);
            //执行sql
            ps.setString(1, "%"+search+"%");
            ps.setInt(2, pageModel.getStartIndex());
            ps.setInt(3, pageModel.getPageSize());
            ResultSet rs = ps.executeQuery();
            //遍历结果集
            while(rs.next()){
                //创建一个学生情况类型的数据用于获取数据库中相同类型的数据
                学生情况 stu=new 学生情况();
                stu.set学号(rs.getString(1));
                stu.set姓名(rs.getString(2));
                stu.set性别(rs.getString(3));
                stu.set出生日期(rs.getString(4));
                stu.set生源地(rs.getString(5));
                stu.set院系代号(rs.getString(6));
                stu.set政治面貌(rs.getString(7));
                stu.set是否住宿(rs.getInt(8));
                stu.set宿舍电话(rs.getString(9));
                stu.set照片(rs.getString(10));
                //把查询结果放入集合中
                list.add(stu);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭链接
            DataSourceTool.closeConnection(connection);
        }
        return list;
    }
    public int queryStudentCount(String search) {
        //--获取数据库链接
        Connection connection = DataSourceTool.getConnection();
        // -- 定义sql语句  占位符表示一个动态数据的入参
        String sql = "select count(*) from 学生情况 where 姓名 like ?;";
        try {
            //--通过链接对象获取sql语句对象
            PreparedStatement ps = connection.prepareStatement(sql);//提供sql语句
            //
            ps.setString(1, "%"+search+"%");
            //--通过sql语句对象执行sql操作
            ResultSet result = ps.executeQuery();
            //遍历结果集
            if (result.next()) {//判断是否有下一条记录
                //返回结果
                return result.getInt(1);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //--关闭链接
            DataSourceTool.closeConnection(connection);
        }
        // 返回0
        return 0;
    }
    public 学生情况 queryStudentById(String sid) {
//        --获取数据库链接【通信】
        Connection connection = DataSourceTool.getConnection();
//        --定义操作的sql语句【占位符-动态入参数据】
        String sql = "select * from 学生情况 where 学号=?";
        try {
//        --通过链接获取sql语句对象【sql】【预编译--占位符】
            PreparedStatement ps = connection.prepareStatement(sql);
//        --通过sql语句对象，给占位符赋值
            ps.setString(1, sid);
//        --通过sql语句对象来执行sql语句【excuteUpdate\excuteQuery(ResultSet)】
            ResultSet rs = ps.executeQuery();
            //获取结果  理解+赋值粘贴+修改===》理解+独立开发
            if (rs.next()) {
                //获取数据是通过getXXX方法来获取   【根据字段名   、    根据索引】
                学生情况 stu = new 学生情况();
                stu.set学号(rs.getString("学号"));
                stu.set姓名(rs.getString("姓名"));
                stu.set性别(rs.getString("性别"));
                stu.set出生日期(rs.getString("出生日期"));
                stu.set生源地(rs.getString("生源地"));
                stu.set院系代号(rs.getString("院系代号"));
                stu.set政治面貌(rs.getString("政治面貌"));
                stu.set宿舍电话(rs.getString("宿舍电话"));
                stu.set是否住宿(rs.getInt("是否住宿"));
                stu.set照片(rs.getString("照片"));
                //返回
                return stu;
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {

            DataSourceTool.closeConnection(connection);
        }

        return null;
    }

}
